Multi-media content or digital content (content) streaming, such as the streaming of audio, video, and/or text media content is becoming increasingly popular. The term “streaming” is typically used to indicate that the content is provided by a server or host device over a network to a client device (i.e., a media playback device implemented as any of a variety of conventional computing devices, such as a desktop PC, a notebook or portable computer, a cellular telephone or other wireless communications device, a personal digital assistant (PDA), a gaming console, an IP set-top box, a handheld PC, and so on). In general, the client device renders (e.g., plays or displays) the streaming content as the content is “simultaneously” received from the host, rather than waiting for all the content or the entire “file” to be delivered.
When content is “streamed” over a network, it is typically streamed in data packets. Such data packets may be in a format defined by a protocol such as real time transfer protocol (RTP), and communicated over another format such as user datagram protocol (UDP). Furthermore, such data packets may be compressed and encoded when. streamed from the host device. The data packets are then decompressed and decoded at the client device.
The data packets may be received by the client device in the order that they are transmitted by the host device; however in certain cases data packets may not be received or received in a different order. Furthermore, there may be some uncertainty as to the rate or flow of received data packets. The data packets may arrive or be received at a faster rate than the client device can render the data packets, or they may not arrive fast enough (i.e., the data packets are not arriving fast enough for the client device to render them). In particular, when streaming is performed, the data packets may not necessarily be transmitted in real-time rate. The data packets may be transmitted faster or slower than real-time rate.
A client device typically uses buffers to store received data packets prior to processing. Such buffers have limited storage and depending on the rate that the packets are received, buffer overflow (from receiving data packets too fast) or buffer underflow (from not receiving data packets fast enough) may occur. If data packets arrive at too fast a rate, client buffers may overflow and data packets may not be processed. If the data packets are not received fast enough or in a timely manner, glitches or breaks are experienced by a user. For example, if multimedia content is streamed to and not received fast enough by the client device, the user sees glitches or breaks in the presented multimedia content. Furthermore, when an overflow or underflow situation is detected, there may be a need to synchronize clocks at the client device and host device in order to correct the problem. Generally, it is already too late to correct the overflow problem after it has already occurred. However, by synchronizing the clocks, the problem may be prevented from occurring again. Or if it is done early enough, it can prevent the problem from occurring. Overflow and underflow may occur for a number of reasons including device clock drift and network congestion.
Accordingly, a need exists to regulate data packet flow or streams from a host device to a client device that may or may not incorporate clock recovery at the host device and the client device.